iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
0
自我挑戰組

學習 Android Kotlin 隨筆系列 第 25

[ Day 25 ] Java 專案 - 如何正確辨識每台不同的本地 PC

  • 分享至 

  • xImage
  •  

前言

這陣子剛好在處理這個問題,解法蠻特別,想說就把它記錄下來好了。

問題描述

案主希望我能夠做一個 Java 軟體,具有登入功能,而且是本地端的登入功能,當登入一次之後就不用再輸入密碼登入了,而且把登入之後的檔案 copy 到別台電腦之後仍然要重複登入才可以使用,該如何辦呢?

解決過程

不能幫他寫一個後端的登入系統來解(因為希望是本地端,不希望多花錢買一台 server),而我自己的解法如下,去拿到該台電腦的 MAC 位址,並且跟登入的那組密碼做 hash ,之後把這個值存到本地端的某個 keyfile,每次執行該程式,就去抓出該特定檔案是否有這串 key 值?驗證是否是對的?

因為每一台電腦的 MAC 位址是獨特的,相當適合用來辨識是否是該台電腦,但在抓取 MAC 位址的時候,又會遇到一個問題,當我連著 wifi、藍芽等等裝置的時候,會抓到多個 MAC 位址,所以需要把所有的 MAC 位址都記錄下來。

以下是參考的 code:

Enumeration<NetworkInterface> networks;
try {
    networks = NetworkInterface.getNetworkInterfaces();
    NetworkInterface inter;
    while (networks.hasMoreElements()) {
        inter = networks.nextElement();
        byte[] mac = inter.getHardwareAddress();
        if (mac != null) {
            String addr = "";
            for (int i = 0; i < mac.length; i++) {
                addr += String.format("%02X", mac[i]);
            }
            addrs.add(addr);
        }
    }
} catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

實作小泥坑

一開始在做的時候,單純只有抓取 MAC 位址的第一項,在嘗試斷網跟連著 wifi 的時候發現出了問題,而連著 wifi 時,也因為關機又開機了之後重連 wifi 而有了差別,於是乾脆把所有抓得到的 MAC 位址都對過一遍。


上一篇
[ Day 24 ] FB 自動回文小編(二)
下一篇
[ Day 26 ] Java 專案 - Java.Swing 元件心得!
系列文
學習 Android Kotlin 隨筆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言